package br.com.rglariguet.pioneer.controller.adm;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.rglariguet.pioneer.controller.ControllerComum;
import br.com.rglariguet.pioneer.dao.AutorizadaDAO;
import br.com.rglariguet.pioneer.dao.DadosBasicosProdutoDAO;
import br.com.rglariguet.pioneer.dao.DefeitoPioneerDAO;
import br.com.rglariguet.pioneer.dao.ReparoDAO;
import br.com.rglariguet.pioneer.enums.StatusReparoUsuarioEnum;
import br.com.rglariguet.pioneer.enums.TipoUsuarioEnum;
import br.com.rglariguet.pioneer.filtropesquisa.FiltroReparo;
import br.com.rglariguet.pioneer.modelos.DefeitoDoReparo;
import br.com.rglariguet.pioneer.modelos.PedidoDoReparo;
import br.com.rglariguet.pioneer.modelos.PedidoPeca;
import br.com.rglariguet.pioneer.modelos.Reparo;
import br.com.rglariguet.pioneer.util.MensagemTela;

@Controller()
@RequestMapping("/seguro/adm/")
public class ReembolsoAscAdminController extends ControllerComum{

	@Autowired
	private AutorizadaDAO autorizadaDao;

	@Autowired
	private ReparoDAO reparoDao;
	
	@Autowired
	private DefeitoPioneerDAO defeitoPioneerDao;
	
	@Autowired
	private DadosBasicosProdutoDAO dadosBasicosProdutoDao;
	
	private Reparo reparo = new Reparo();
	
	@ModelAttribute("reparo")
	public Reparo getReparo() {
		return this.reparo;
	}
	
	public void setReparo(Reparo reparo) {
		this.reparo = reparo;
	}
	
	
	
	@RequestMapping("consultaAprovacaoReembolsoASCAdm")
	public ModelAndView abreTelaConsultaAprovacaoReembolsoASCAdmin(){
		ModelAndView mv = new ModelAndView("/seguro/adm/consultaAprovacaoReembolsoASCAdm");
		mv.addObject("autorizadas", autorizadaDao.listarTodosPorTipo(TipoUsuarioEnum.ASC));
		mv.addObject("dadosBasicos", dadosBasicosProdutoDao.listarTodos());
		mv.addObject("filtroReparo", new FiltroReparo());
		return mv;
	}
	
	@RequestMapping("buscarReparosReembolsoAscAdmin")
	public ModelAndView buscarReparosReembolsoAscAdmin(FiltroReparo filtroReparo) {
		ModelAndView mv = new ModelAndView("/seguro/adm/consultaAprovacaoReembolsoASCAdm");
		filtroReparo.setStatus(StatusReparoUsuarioEnum.ENVIADO_PIONEER);
		List<Reparo> reparos = reparoDao.listarComFiltro(filtroReparo);
		mv.addObject("reparos", reparos);
		mv.addObject("autorizadas", autorizadaDao.listarTodosPorTipo(TipoUsuarioEnum.ASC));
		mv.addObject("dadosBasicos", dadosBasicosProdutoDao.listarTodos());
		return mv;
	}
	@RequestMapping("editarReembolsoAscAdmin")
	public ModelAndView abreTelaEdicaoReembolsoAscAdmin(long id) {
		setReparo(reparoDao.buscaPorId(id));
		return abreTelaDetalheDeReparoParaReembolsoAscAdmin(new MensagemTela(), true, getReparo());
	}
	
	
	@RequestMapping("reprovarReembolso")
	public ModelAndView reprovarReembolso(String motivoReprovacao) {
		reparo.setStatus(StatusReparoUsuarioEnum.REPROVADO_REEMBOLSO);
		reparo.setMotivoReprovacao(motivoReprovacao);
		reparoDao.alterar(reparo);
		setReparo(reparo);
		return abreTelaDetalheDeReparoParaReembolsoAscAdmin(criaMsgSucesso("reparo.reprovado.sucesso"), true, getReparo());
	}
	
	@RequestMapping("aprovarReembolsoAscAdmin")
	public ModelAndView aprovarReembolso(long id) {
		reparo.setStatus(StatusReparoUsuarioEnum.ENCERRADO);
		reparoDao.alterar(reparo);
		setReparo(reparo);
		return abreTelaDetalheDeReparoParaReembolsoAscAdmin(criaMsgSucesso("reembolso.aprovado.sucesso"), true, getReparo());
	}
	
	
	@RequestMapping("detalheDeReparoParaReembolsoAscAdmin")
	public ModelAndView abreTelaDetalheDeReparoParaReembolsoAscAdmin(MensagemTela msg, boolean isRetornoValidacao, Reparo reparo) {
		ModelAndView mv = new ModelAndView("/seguro/adm/aprovacaoReembolso");
		mv.addObject("dadosBasicos", dadosBasicosProdutoDao.listarTodos());
		mv.addObject("msg", msg.getTipoMensagem() != null ? msg : null);
		
		if (reparo != null) {
			if (reparo.getStatus() != StatusReparoUsuarioEnum.ABERTO) {
				mv.addObject("pedidoPeca", new PedidoPeca());
				mv.addObject("defeitosPioneer", defeitoPioneerDao.listarTodos());
			}
			mv.addObject("reparo", reparo);
		}
		
		if (!isRetornoValidacao) {
			mv.addObject("reparo", new Reparo());
			getReparo().setPedidoDoReparo(new PedidoDoReparo());
			getReparo().setDefeitoDoReparo(new DefeitoDoReparo());
		}
		return mv;
	}

}
